package com.feiyun.config;


import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

import com.feiyun.exception.ExceptionTypeEnum;
import com.feiyun.exception.ServiceException;
import com.feiyun.util.JWTUtils;

/**
 * 拦截器：验证用户是否登录
 */
//@Slf4j
//@Component
//@RequiredArgsConstructor
public class UserLoginInterceptor implements HandlerInterceptor {
//    @Value("${jwt.refreshTime}")
//    private Long refreshTime;
//
//    @Value("${jwt.expireTime}")
//    private Long expireTime;
//
//    private final JWTUtils jwtUtils;
//
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
//        log.info("=======进入拦截器========");
//        // 如果不是映射到方法直接通过, 可以访问资源
//        if (!(handler instanceof HandlerMethod)) {
//            return true;
//        }
//        // 为空就返回错误
//        String token = request.getHeader("token");
//        if (StringUtils.isEmpty(token)) {
//            log.warn("=======token为空========");
//            return false;
//        }
//        // 解析并校验
//        Map<String, String> map;
//        try {
//            map = jwtUtils.parseToken(token);
//        } catch (Exception e) {
//            log.error("Invalid token, caused by:{}", e.getMessage());
//            return false;
//        }
//        String userId = map.get("userId");
//        long timeOfUse = System.currentTimeMillis() - Long.parseLong(map.get("timeStamp"));
//
//        // 判断 token 是否过期
//        if (timeOfUse < refreshTime) {
//            log.info("token验证成功");
//            return true;
//        }
//        // 超过token刷新时间，刷新token
//        else if (timeOfUse >= refreshTime && timeOfUse < expireTime) {
//            response.setHeader("token", jwtUtils.createToken(Integer.parseInt(userId)));
//            log.info("token刷新成功");
//            return true;
//        }
//        // token过期就返回 token 无效.
//        else {
//            throw new ServiceException(
//                    HttpStatus.FORBIDDEN,
//                    "请先登录",
//                    ExceptionTypeEnum.TOKEN_EXCEPTION_TYPE);
//        }
//    }
}